﻿Shader "Unlit/Refract"
{
    Properties
    {
        _MainTex ("MainTex", 2D) = "white" {}
        _BumpMap ("NormalTex", 2D) = "bump" {}
        _BumpAmt("DistortStengh",Range(0,100)) = 10 
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        GrabPass{
            Name "1UPRefractBase"
            "_GrabTexture"
        }

        pass{

            Name "1UPRefractBase"
            Tags{ "LightMode" = "Always" }

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_fog
            #include "UnityCG.cginc"

            struct appdata_t {
                float4 vertex : POSITION;
                float2 texcoord: TEXCOORD0;
            };

            struct v2f {
                float4 vertex : SV_POSITION;
                float4 uvgrab : TEXCOORD0;
                float2 uvbump : TEXCOORD1;
                float2 uvmain : TEXCOORD2;
                UNITY_FOG_COORDS(3)
            };

            float _BumpAmt;
            float4 _BumpMap_ST;
            float4 _MainTex_ST;

            v2f vert(appdata_t v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uvgrab = ComputeGrabScreenPos(o.vertex);
                o.uvbump = TRANSFORM_TEX(v.vertex, _BumpMap);
                o.uvmain = TRANSFORM_TEX(v.vertex, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            sampler2D _GrabTexture;
            float4 _GrabTexture_TexelSize;
            sampler2D _BumpMap;
            sampler2D _MainTex;

            half4 frag(v2f i) : SV_Target
            {
                half2 bump = UnpackNormal(tex2D(_BumpMap, i.uvbump)).rg;
                float2 offset = bump * _BumpAmt * _GrabTexture_TexelSize.xy;
            #ifdef UNITY_Z_0_FAR_FROM_CLIPSPACE //to handle recent standard asset package on older version of unity (before 5.5)
                i.uvgrab.xy = offset * UNITY_Z_0_FAR_FROM_CLIPSPACE(i.uvgrab.z) + i.uvgrab.xy;
            #else
                i.uvgrab.xy = offset * i.uvgrab.z + i.uvgrab.xy;
            #endif

                half4 col = tex2Dproj(_GrabTexture, UNITY_PROJ_COORD(i.uvgrab));
                
                UNITY_APPLY_FOG(i.fogCoord, col);
                return col;
            }
                ENDCG
            }

        }
}
